; =============================================
; COMPREHENSIVE LOGO COMMAND TEST PROGRAM
; =============================================
; Tests every LOGO command except REPEAT, IF, IFELSE
; Run each section independently or as a complete program
; Each command should produce visible output or action
; =============================================

; =============================================
; SECTION 1: BASIC TURTLE MOVEMENT
; =============================================
PRINT "=== TESTING BASIC MOVEMENT ==="

; Test FORWARD command
PRINT "Testing FORWARD..."
FORWARD 50
PRINT "Moved forward 50 steps"

; Test BACKWARD command  
PRINT "Testing BACKWARD..."
BACKWARD 25
PRINT "Moved backward 25 steps"

; Test RIGHT rotation
PRINT "Testing RIGHT..."
RIGHT 90
PRINT "Turned right 90 degrees"

; Test LEFT rotation
PRINT "Testing LEFT..."
LEFT 45
PRINT "Turned left 45 degrees"

; Test aliases
PRINT "Testing movement aliases..."
FD 30
PRINT "FD 30 completed"
BK 15
PRINT "BK 15 completed"
RT 90
PRINT "RT 90 completed"
LT 90
PRINT "LT 90 completed"

; =============================================
; SECTION 2: POSITION AND ORIENTATION COMMANDS
; =============================================
PRINT "=== TESTING POSITION COMMANDS ==="

; Test HOME command
PRINT "Testing HOME..."
HOME
PRINT "Turtle returned to home position"

; Test current position queries
PRINT "Testing position queries..."
PRINT XCOR
PRINT YCOR
PRINT POS
PRINT HEADING

; Test SETXY command
PRINT "Testing SETXY..."
SETXY 100 100
PRINT "Moved to position 100,100"
PRINT POS

; Test SETHEADING command
PRINT "Testing SETHEADING..."
SETHEADING 45
PRINT "Set heading to 45 degrees"
PRINT HEADING

; Test TOWARDS and DISTANCE
PRINT "Testing TOWARDS and DISTANCE..."
PRINT TOWARDS 0 0 200 200
PRINT DISTANCE 0 0 100 100

; =============================================
; SECTION 3: PEN CONTROL COMMANDS
; =============================================
PRINT "=== TESTING PEN CONTROL ==="

; Test pen up/down
PRINT "Testing pen control..."
PENUP
PRINT "Pen lifted up"
PRINT PENDOWNP

PENDOWN
PRINT "Pen put down"
PRINT PENDOWNP

; Test pen color
PRINT "Testing pen colors..."
PENCOLOR red
PRINT "Pen color set to red"
PRINT PENCOLOR

SETPENCOLOR blue
PRINT "Pen color set to blue"
PRINT PENCOLOR

PENCOLOR black
PRINT "Pen color set to black"

; Test pen size
PRINT "Testing pen size..."
SETPENSIZE 5
PRINT "Pen size set to 5"
PRINT PENSIZE

SETPENSIZE 2
PRINT "Pen size reset to 2"

; =============================================
; SECTION 4: SCREEN AND TURTLE DISPLAY
; =============================================
PRINT "=== TESTING SCREEN CONTROL ==="

; Test turtle visibility
PRINT "Testing turtle visibility..."
HIDETURTLE
PRINT "Turtle hidden"
PRINT SHOWNP

SHOWTURTLE
PRINT "Turtle shown"
PRINT SHOWNP

; Test screen clearing
PRINT "Testing screen commands..."
CLEAN
PRINT "Screen cleaned"

HOME
PRINT "Turtle homed"

; Test boundary modes
PRINT "Testing boundary modes..."
FENCE
PRINT "Boundary mode set to FENCE"

WRAP
PRINT "Boundary mode set to WRAP"

WINDOW
PRINT "Boundary mode set to WINDOW"

FENCE
PRINT "Boundary mode reset to FENCE"

; =============================================
; SECTION 5: VARIABLE OPERATIONS
; =============================================
PRINT "=== TESTING VARIABLES ==="

; Test MAKE command
PRINT "Testing variable creation..."
MAKE "SIZE 75
PRINT "Variable SIZE created"

MAKE "COLOR "red
PRINT "Variable COLOR created"

MAKE "MESSAGE "Hello World
PRINT "Variable MESSAGE created"

; Test THING command (variable retrieval)
PRINT "Testing variable retrieval..."
PRINT THING "SIZE
PRINT THING "COLOR
PRINT THING "MESSAGE

; Test variables in calculations
PRINT "Testing variables in math..."
MAKE "NUM1 10
MAKE "NUM2 20
MAKE "TOTAL SUM :NUM1 :NUM2
PRINT THING "TOTAL

; =============================================
; SECTION 6: MATHEMATICAL OPERATIONS
; =============================================
PRINT "=== TESTING MATH OPERATIONS ==="

; Test basic arithmetic
PRINT "Testing basic arithmetic..."
PRINT SUM 15 25
PRINT DIFFERENCE 50 20
PRINT PRODUCT 6 7
PRINT QUOTIENT 100 4
PRINT REMAINDER 17 5

; Test with variables
PRINT "Testing math with variables..."
MAKE "A 12
MAKE "B 8
PRINT SUM :A :B
PRINT DIFFERENCE :A :B
PRINT PRODUCT :A :B

; Test advanced math functions
PRINT "Testing advanced math..."
PRINT SQRT 16
PRINT POWER 2 3
PRINT ABS -15
PRINT INT 3.7
PRINT ROUND 3.7

; Test trigonometric functions
PRINT "Testing trigonometry..."
PRINT SIN 30
PRINT COS 60
PRINT TAN 45
PRINT ATAN 1

; Test logarithmic functions
PRINT "Testing logarithms..."
PRINT EXP 1
PRINT LOG 2.71828

; =============================================
; SECTION 7: LOGICAL OPERATIONS
; =============================================
PRINT "=== TESTING LOGICAL OPERATIONS ==="

; Test comparison operations
PRINT "Testing comparisons..."
PRINT LESSP 5 10
PRINT GREATERP 15 10
PRINT EQUALP 7 7
PRINT EQUALP 5 10

; Test logical operations
PRINT "Testing logical operators..."
PRINT AND TRUE TRUE
PRINT AND TRUE FALSE
PRINT OR TRUE FALSE
PRINT OR FALSE FALSE
PRINT NOT TRUE
PRINT NOT FALSE

; Test with numbers
PRINT "Testing logical with numbers..."
PRINT LESSP 3 8
PRINT GREATERP 12 5
PRINT EQUALP 6 6

; =============================================
; SECTION 8: STRING PROCESSING
; =============================================
PRINT "=== TESTING STRING OPERATIONS ==="

; Test string creation
PRINT "Testing string creation..."
PRINT WORD "HEL "LO
PRINT SENTENCE "HELLO "WORLD
PRINT LIST "RED "GREEN "BLUE

; Test string decomposition
PRINT "Testing string analysis..."
PRINT FIRST "HELLO
PRINT LAST "WORLD
PRINT BUTFIRST "HELLO
PRINT BUTLAST "WORLD
PRINT COUNT "TESTING

; Test with lists
PRINT "Testing list operations..."
MAKE "COLORS LIST "RED "GREEN "BLUE
PRINT FIRST :COLORS
PRINT LAST :COLORS
PRINT COUNT :COLORS
PRINT ITEM 2 :COLORS

; Test string predicates
PRINT "Testing string predicates..."
PRINT EMPTYP ""
PRINT EMPTYP "HELLO
PRINT WORDP "HELLO
PRINT MEMBER "EL "HELLO

; =============================================
; SECTION 9: OUTPUT AND DISPLAY
; =============================================
PRINT "=== TESTING OUTPUT COMMANDS ==="

; Test PRINT command
PRINT "Testing PRINT command..."
PRINT "This is a simple message"
PRINT 42
PRINT :SIZE

; Test SHOW command
PRINT "Testing SHOW command..."
SHOW "Hello from SHOW
SHOW 123
SHOW :MESSAGE

; Test printing calculations
PRINT "Testing calculated output..."
PRINT SUM 10 15
PRINT WORD "RESULT: :TOTAL

; =============================================
; SECTION 10: UTILITY COMMANDS
; =============================================
PRINT "=== TESTING UTILITY COMMANDS ==="

; Test RANDOM command
PRINT "Testing RANDOM..."
PRINT RANDOM 10
PRINT RANDOM 100
PRINT RANDOM 6

; Test with variables
MAKE "DICE RANDOM 6
PRINT WORD "DICE ROLL: :DICE

; =============================================
; SECTION 11: DRAWING DEMONSTRATION
; =============================================
PRINT "=== DRAWING DEMONSTRATION ==="

; Clear screen and start fresh
CLEARSCREEN
PRINT "Screen cleared for drawing demo"

; Set up for drawing
PENCOLOR red
PENDOWN
PRINT "Ready to draw with red pen"

; Draw a simple pattern without loops
FORWARD 50
RIGHT 90
FORWARD 50
RIGHT 90
FORWARD 50
RIGHT 90
FORWARD 50
RIGHT 90
PRINT "Square drawn manually"

; Move to new position
PENUP
SETXY 100 100
PENDOWN
PENCOLOR blue
PRINT "Moved to new position, changed to blue"

; Draw triangle manually
FORWARD 60
RIGHT 120
FORWARD 60
RIGHT 120
FORWARD 60
RIGHT 120
PRINT "Triangle drawn manually"

; Test different pen sizes
PENCOLOR green
SETPENSIZE 5
FORWARD 30
SETPENSIZE 1
FORWARD 30
PRINT "Line drawn with different pen sizes"

; =============================================
; SECTION 12: COMPREHENSIVE VARIABLE TEST
; =============================================
PRINT "=== COMPREHENSIVE VARIABLE TEST ==="

; Create various types of variables
MAKE "NUMBER 42
MAKE "WORD "LOGO
MAKE "SENTENCE "HELLO WORLD
MAKE "CALCULATION SUM 25 25

; Display all variables
PRINT "Testing variable storage and retrieval..."
PRINT WORD "NUMBER: :NUMBER
PRINT WORD "WORD: :WORD
PRINT WORD "SENTENCE: :SENTENCE
PRINT WORD "CALCULATION: :CALCULATION

; Use variables in operations
MAKE "DOUBLE PRODUCT :NUMBER 2
MAKE "COMBINED WORD :WORD :NUMBER
PRINT WORD "DOUBLE: :DOUBLE
PRINT WORD "COMBINED: :COMBINED

; =============================================
; SECTION 13: FINAL SYSTEM STATUS
; =============================================
PRINT "=== FINAL SYSTEM STATUS ==="

; Report final turtle state
HOME
PENDOWN
PENCOLOR black
SETPENSIZE 2
SHOWTURTLE

PRINT "Final turtle position:"
PRINT POS
PRINT WORD "Final heading: " HEADING
PRINT WORD "Pen is down: " PENDOWNP
PRINT WORD "Turtle visible: " SHOWNP

; Test mathematical accuracy
PRINT "Mathematical accuracy test:"
MAKE "TEST1 SUM 1 2
MAKE "TEST2 PRODUCT 3 4
MAKE "TEST3 QUOTIENT 15 3
PRINT WORD "1+2=" :TEST1
PRINT WORD "3*4=" :TEST2
PRINT WORD "15/3=" :TEST3

; String processing accuracy
PRINT "String processing accuracy:"
MAKE "TESTWORD "TESTING
PRINT WORD "Length of TESTING: " COUNT :TESTWORD
PRINT WORD "First char: " FIRST :TESTWORD
PRINT WORD "Last char: " LAST :TESTWORD

PRINT "=== ALL BASIC LOGO COMMANDS TESTED ==="
PRINT "If you can see this message, all basic commands are working!"

; End of comprehensive test program